home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / utilitys / 117 / anet2 / anetctrl.mod next >
Text File  |  1987-12-21  |  14KB  |  376 lines

  1. MODULE Control;
  2.  
  3. IMPORT GEMVDIbase, GEMAESbase, AESMenus, AESForms, AESObjects, AESEvents,
  4.        AESResources ;
  5.  
  6. FROM   AESGraphics      IMPORT GrafMouse;
  7.  
  8. FROM   AESObjects       IMPORT ObjectDraw;
  9.  
  10. FROM   MYLIB    IMPORT  InitResource,Terminate,
  11.                         DeselectObject,
  12.                         dTree,MenuTree,x,y,w,h,InitWindow,CloseWindow;
  13.  
  14. FROM   SYSTEM   IMPORT  ADR,ADDRESS,CODE,TSIZE;
  15.  
  16. FROM   Strings  IMPORT  String, Concat;
  17.  
  18. FROM   XBIOS    IMPORT  SuperExec,SerialSpeed,ConfigureRS232,FlowFlavor;
  19.  
  20. FROM   BIOS     IMPORT  DriveSet;
  21.  
  22. FROM   GEMDOS   IMPORT  ExecMode,Exec,Open,Close,Read,Write,Create;
  23.  
  24. FROM   TextIO   IMPORT  SetDefaultIO,WriteString,WriteLn;
  25.  
  26. FROM   Streams  IMPORT  StreamKinds;
  27.  
  28. TYPE
  29.   SequenceNr  = [0..1];
  30.   control     = RECORD
  31.                  magic          :       LONGCARD;
  32.                  speed          :       SerialSpeed;
  33.                  reset          :       BOOLEAN;
  34.                  networkactive  :       BOOLEAN;
  35.                  remotedrive    :       CARDINAL;
  36.                  drivemap       :       DriveSet;
  37.                 nextframetosend :       SequenceNr;
  38.                 frameexpected   :       SequenceNr;
  39.                 sendreset       :       BOOLEAN;
  40.                END;
  41.  
  42.   consave     = RECORD
  43.                  magic          :       LONGCARD;
  44.                  speed          :       SerialSpeed;
  45.                  reset          :       BOOLEAN;
  46.                  networkactive  :       BOOLEAN;
  47.                 END;
  48. CONST
  49.        resourcefilename = "ANETWORK.RSC" ;
  50.        RTS              = 04E75H ;
  51.  
  52. CONST
  53.       DRVD = 58 ;
  54.       DRVF = 60 ;
  55.       DRVE = 59 ;
  56.      SEQUP = 62 ;
  57.        S10 = 64 ;
  58.        S00 = 63 ;
  59.        S01 = 65 ;
  60.        S11 = 66 ;
  61.      ABOUT = 1 ;
  62.    ABOUTOK = 1 ;
  63.       MENU = 0 ;
  64.       FILE = 4 ;
  65.       DESK = 3 ;
  66.       BAUD = 5 ;
  67.       MODE = 6 ;
  68.    OPTIONS = 8 ;
  69.       DIAL = 7 ;
  70.        SEQ = 9 ;
  71.   ABOUTNET = 12 ;
  72.       LOAD = 21 ;
  73.       QUIT = 22 ;
  74.      BAUD1 = 25 ;
  75.      BAUD2 = 26 ;
  76.      BAUD4 = 28 ;
  77.      BAUD3 = 27 ;
  78.      BAUD5 = 29 ;
  79.      BAUD6 = 30 ;
  80.        INT = 32 ;
  81.      MODE1 = 33 ;
  82.      MODE2 = 34 ;
  83.   REBOOTOK = 36 ;
  84.      DIAL1 = 38 ;
  85.      DIAL3 = 40 ;
  86.      DIAL2 = 39 ;
  87.      DIAL4 = 41 ;
  88.      DIAL5 = 42 ;
  89.      DIAL7 = 44 ;
  90.      DIAL6 = 43 ;
  91.      DIAL8 = 45 ;
  92.      DIAL9 = 46 ;
  93.     DIAL11 = 48 ;
  94.     DIAL10 = 47 ;
  95.     DIAL12 = 49 ;
  96.     DIAL13 = 50 ;
  97.     DIAL15 = 52 ;
  98.     DIAL14 = 51 ;
  99.     DIAL16 = 53 ;
  100.       DRVB = 56 ;
  101.       DRVA = 55 ;
  102.       DRVC = 57 ;
  103.  
  104. VAR    status                              : INTEGER;
  105.        resourcename,nulls,on,off,netdrv    : ARRAY [0..16] OF CHAR ;
  106.        tempchar                            : ARRAY [0..2] OF CHAR;
  107.        char                                : CHAR;
  108.        result,handle                       : INTEGER ;
  109.        done,OK                             : BOOLEAN;
  110.        Cptr    [0200H]                     : ADDRESS;
  111.        Dptr    [0204H]                     : DriveSet;
  112.        Mptr    [0208H] ,count              : LONGCARD;
  113.        C                                   : POINTER TO control;
  114.        CSAVE                               : POINTER TO consave;
  115.        drvnr,i                             : CARDINAL;
  116.        phonenumber                         : ARRAY [0..15] OF String;
  117.  
  118.  
  119.   PROCEDURE DoAboutDialog ;
  120.   BEGIN
  121.         AESResources.ResourceGetAddr(GEMAESbase.RTree,ABOUT,dTree) ;
  122.         AESForms.FormCenter(dTree,x,y,w,h) ;
  123.         AESForms.FormDialogue(GEMAESbase.FormStart,0,0,0,0,x,y,w,h) ;
  124.         AESForms.FormDialogue(GEMAESbase.FormGrow,0,0,0,0,x,y,w,h) ;
  125.         ObjectDraw(dTree,0,10,x,y,w,h) ;
  126.         result := AESForms.FormDo(dTree,-1) ;
  127.         DeselectObject(ABOUT,ABOUTOK) ; 
  128.         AESForms.FormDialogue(GEMAESbase.FormShrink,0,0,0,0,x,y,w,h) ;
  129.         AESForms.FormDialogue(GEMAESbase.FormFinish,0,0,0,0,x,y,w,h) ;
  130.   END DoAboutDialog ;
  131.  
  132.  
  133. (* ------------------------------------------------------------------- *)
  134.  
  135.  
  136. PROCEDURE Events ;
  137. (* Handle resource events *)
  138. VAR
  139.   pipeBuff : ARRAY [0..9] OF INTEGER ;
  140.  
  141.  
  142.   PROCEDURE SelectMenu( Menu, Item : INTEGER ) ;
  143.   BEGIN
  144.  
  145.       CASE Menu OF
  146.       DESK     : IF Item = ABOUTNET THEN
  147.                    DoAboutDialog ;
  148.                  END                        ;       |
  149.       FILE     : CASE Item OF
  150.                    LOAD     : C^.networkactive:=(NOT C^.networkactive); |
  151.                    QUIT     : done := TRUE  ;                           | 
  152.                  ELSE
  153.                  END ;
  154.                  IF C^.networkactive THEN 
  155.                     AESMenus.MenuText(MenuTree,LOAD,ADR(on));
  156.                  ELSE
  157.                     AESMenus.MenuText(MenuTree,LOAD,ADR(off));
  158.                  END;                                                   |
  159.  
  160.       BAUD     :  AESMenus.MenuItemCheck(MenuTree,BAUD1,0);
  161.                   AESMenus.MenuItemCheck(MenuTree,BAUD2,0);
  162.                   AESMenus.MenuItemCheck(MenuTree,BAUD3,0);
  163.                   AESMenus.MenuItemCheck(MenuTree,BAUD4,0);
  164.                   AESMenus.MenuItemCheck(MenuTree,BAUD5,0);
  165.                   AESMenus.MenuItemCheck(MenuTree,BAUD6,0);
  166.                   CASE Item OF
  167.                    BAUD1    : C^.speed := BPS19200  ; AESMenus.MenuItemCheck(MenuTree,Item,1)       | 
  168.                    BAUD2    : C^.speed := BPS9600   ; AESMenus.MenuItemCheck(MenuTree,Item,1)       | 
  169.                    BAUD3    : C^.speed := BPS4800   ; AESMenus.MenuItemCheck(MenuTree,Item,1)       | 
  170.                    BAUD4    : C^.speed := BPS2400   ; AESMenus.MenuItemCheck(MenuTree,Item,1)       | 
  171.                    BAUD5    : C^.speed := BPS1200   ; AESMenus.MenuItemCheck(MenuTree,Item,1)       | 
  172.                    BAUD6    : C^.speed := BPS300    ; AESMenus.MenuItemCheck(MenuTree,Item,1)       | 
  173.                  ELSE
  174.                  END ;
  175.                  ConfigureRS232(C^.speed,NONE,136,-1,-1,-1);      |
  176.  
  177.       MODE     : CASE Item OF
  178.                    INT        : Create("ANETWORK.INT",0,handle);
  179.                    count:=TSIZE(consave);
  180.                    Write(handle,count,CSAVE);
  181.                    OK:=Close(handle);  |
  182.                    REBOOTOK   : CODE(03F3CH,0020H,04E41H,
  183.                                      042B9H,0,0420H,042B9H,0,043AH,
  184.                                      02079H,0,4,04ED0H)  ;       | 
  185. (*                 MODE2      : GIWrite(14,255)  ;  | *)
  186.                  ELSE
  187.                  END ;                              |
  188.  
  189.       DIAL     : CASE Item OF
  190.                    DIAL1    : i:=0  ;       | 
  191.                    DIAL2    : i:=1  ;       | 
  192.                    DIAL3    : i:=2  ;       | 
  193.                    DIAL4    : i:=3  ;       | 
  194.                    DIAL5    : i:=4  ;       | 
  195.                    DIAL6    : i:=5  ;       | 
  196.                    DIAL7    : i:=6  ;       | 
  197.                    DIAL8    : i:=7  ;       | 
  198.                    DIAL9    : i:=8  ;       | 
  199.                    DIAL10    : i:=9   ;       | 
  200.                    DIAL11    : i:=10  ;       | 
  201.                    DIAL12    : i:=11  ;       | 
  202.                    DIAL13    : i:=12  ;       | 
  203.                    DIAL14    : i:=13  ;       | 
  204.                    DIAL15    : i:=14  ;       |
  205.                    DIAL16    : i:=15  ;       | 
  206.                  ELSE
  207.                  END ;
  208.                  FOR status:=0 TO 80 DO
  209.                      IF phonenumber[i][status]=CHAR(32) THEN
  210.                         phonenumber[i][status]:=CHAR(0);
  211.                      END;
  212.                  END;
  213.                  SetDefaultIO("AUX:",READWRITE,status);
  214.                  WriteString(phonenumber[i]);
  215.                  WriteLn;
  216.                  SetDefaultIO("CON:",READWRITE,status);                    |
  217.  
  218.       SEQ      : CASE Item OF
  219.                    SEQUP    : C^.sendreset:= TRUE ; |
  220.                  ELSE
  221.                  END ;
  222.      AESMenus.MenuItemCheck(MenuTree,S00,0);
  223.      AESMenus.MenuItemCheck(MenuTree,S10,0);
  224.      AESMenus.MenuItemCheck(MenuTree,S01,0);
  225.      AESMenus.MenuItemCheck(MenuTree,S11,0);
  226.      IF (C^.nextframetosend=0) AND (C^.frameexpected=0) THEN
  227.         AESMenus.MenuItemCheck(MenuTree,S00,1);
  228.      END;
  229.      IF (C^.nextframetosend=1) AND (C^.frameexpected=0) THEN
  230.         AESMenus.MenuItemCheck(MenuTree,S10,1);
  231.      END;
  232.      IF (C^.nextframetosend=0) AND (C^.frameexpected=1) THEN
  233.         AESMenus.MenuItemCheck(MenuTree,S01,1);
  234.      END;
  235.      IF (C^.nextframetosend=1) AND (C^.frameexpected=1) THEN
  236.         AESMenus.MenuItemCheck(MenuTree,S11,1);
  237.      END;                                       |
  238.     ELSE
  239.     END ; 
  240.     (* put header back normal*)
  241.     AESMenus.MenuTitleNormal(MenuTree,Menu,1) ;
  242.   END SelectMenu ;
  243.  
  244. BEGIN
  245.   GrafMouse(GEMAESbase.Arrow,NIL) ; (* put pointing mouse *)
  246.   done := FALSE ;
  247.   REPEAT
  248.     AESEvents.EventMessage(ADR(pipeBuff)) ;
  249.     CASE pipeBuff[0] OF         (* message type *)
  250.       GEMAESbase.MenuSelected   : SelectMenu(pipeBuff[3],pipeBuff[4]) ; |
  251.       GEMAESbase.WindowClosed   : done := TRUE ; |
  252.     ELSE
  253.     END ;
  254.   UNTIL done ;
  255. END Events ;
  256.  
  257. (*$P- *) (* set vector to control record *)
  258. PROCEDURE getcontrol;
  259. BEGIN
  260.         C := Cptr;
  261.         CSAVE := Cptr;
  262.         CODE(RTS);
  263. END     getcontrol;
  264.  
  265. BEGIN
  266.         nulls:="   ";
  267.         on :="  ON  ";
  268.         off:="  OFF ";
  269.         SuperExec(PROC(getcontrol));
  270.         IF C^.magic#324159265 THEN
  271.            Exec(loadExecute,"ANETWORK.PRG",nulls,nulls,result);
  272.            IF result<0 THEN HALT END;
  273.            SuperExec(PROC(getcontrol));
  274.         END;
  275.         Open("ANETWORK.INT",0,handle);
  276.         IF handle>0 THEN        (* if there is, load in init file *)
  277.            count:=TSIZE(consave);
  278.            Read(handle,count,CSAVE);
  279.            OK:=Close(handle);
  280.         END;
  281.         Open("ANETWORK.DIL",0,handle);
  282.         IF handle>0 THEN        (* if there is, load in dialer file *)
  283.            count:=1;
  284.            FOR i:=0 TO 15 DO
  285.                LOOP
  286.                    Read(handle,count,ADR(char));
  287.                    IF (char=12C) THEN EXIT END;
  288.                    IF (char=12C) OR (char=15C) THEN char:=0C END; 
  289.                    tempchar[0]:=char;
  290.                    Concat(phonenumber[i],tempchar,phonenumber[i]);
  291.                END;
  292.            END;
  293.            OK:=Close(handle);
  294.         END;
  295.         resourcename:=resourcefilename ;
  296.         IF InitResource(resourcename,MENU) THEN ;
  297.         AESMenus.MenuText(MenuTree,DIAL1,ADR(phonenumber[0]));
  298.         AESMenus.MenuText(MenuTree,DIAL2,ADR(phonenumber[1]));
  299.         AESMenus.MenuText(MenuTree,DIAL3,ADR(phonenumber[2]));
  300.         AESMenus.MenuText(MenuTree,DIAL4,ADR(phonenumber[3]));
  301.         AESMenus.MenuText(MenuTree,DIAL5,ADR(phonenumber[4]));
  302.         AESMenus.MenuText(MenuTree,DIAL6,ADR(phonenumber[5]));
  303.         AESMenus.MenuText(MenuTree,DIAL7,ADR(phonenumber[6]));
  304.         AESMenus.MenuText(MenuTree,DIAL8,ADR(phonenumber[7]));
  305.         AESMenus.MenuText(MenuTree,DIAL9,ADR(phonenumber[8]));
  306.         AESMenus.MenuText(MenuTree,DIAL10,ADR(phonenumber[9]));
  307.         AESMenus.MenuText(MenuTree,DIAL11,ADR(phonenumber[10]));
  308.         AESMenus.MenuText(MenuTree,DIAL12,ADR(phonenumber[11]));
  309.         AESMenus.MenuText(MenuTree,DIAL13,ADR(phonenumber[12]));
  310.         AESMenus.MenuText(MenuTree,DIAL14,ADR(phonenumber[13]));
  311.         AESMenus.MenuText(MenuTree,DIAL15,ADR(phonenumber[14]));
  312.         AESMenus.MenuText(MenuTree,DIAL16,ADR(phonenumber[15]));
  313.         CASE C^.speed OF       (* PLACE CHECK IN BAUD RATE MENU *)
  314.              BPS19200    :  AESMenus.MenuItemCheck(MenuTree,BAUD1,1); |
  315.              BPS9600     :  AESMenus.MenuItemCheck(MenuTree,BAUD2,1); |
  316.              BPS4800     :  AESMenus.MenuItemCheck(MenuTree,BAUD3,1); |
  317.              BPS2400     :  AESMenus.MenuItemCheck(MenuTree,BAUD4,1); |
  318.              BPS1200     :  AESMenus.MenuItemCheck(MenuTree,BAUD5,1); |
  319.              BPS300      :  AESMenus.MenuItemCheck(MenuTree,BAUD6,1); |
  320.         ELSE
  321.         END;
  322.  
  323.         netdrv:="  DRV A = F";
  324.         drvnr:=2;
  325.         WHILE drvnr IN C^.drivemap DO
  326.               INC(drvnr);
  327.         END; (* while *)
  328.         INC(drvnr);
  329.         netdrv[6]:="A"; netdrv[10]:=CHAR(041H+drvnr);
  330.         AESMenus.MenuText(MenuTree,DRVA,ADR(netdrv));
  331.         netdrv[6]:="B"; netdrv[10]:=CHAR(041H+drvnr+1);
  332.         AESMenus.MenuText(MenuTree,DRVB,ADR(netdrv));
  333.         netdrv[6]:="C"; netdrv[10]:=CHAR(041H+drvnr+2);
  334.         AESMenus.MenuText(MenuTree,DRVC,ADR(netdrv));
  335.         netdrv[6]:="D"; netdrv[10]:=CHAR(041H+drvnr+3);
  336.         AESMenus.MenuText(MenuTree,DRVD,ADR(netdrv));
  337.         netdrv[6]:="E"; netdrv[10]:=CHAR(041H+drvnr+4);
  338.         AESMenus.MenuText(MenuTree,DRVE,ADR(netdrv));
  339.         netdrv[6]:="F"; netdrv[10]:=CHAR(041H+drvnr+5);
  340.         AESMenus.MenuText(MenuTree,DRVF,ADR(netdrv));
  341.  
  342.         CASE C^.remotedrive OF       (* PLACE CHECK IN REMOTE MENU *)
  343.              0    :  AESMenus.MenuItemCheck(MenuTree,DRVA,1); |
  344.              1    :  AESMenus.MenuItemCheck(MenuTree,DRVB,1); |
  345.              2    :  AESMenus.MenuItemCheck(MenuTree,DRVC,1); |
  346.              3    :  AESMenus.MenuItemCheck(MenuTree,DRVD,1); |
  347.              4    :  AESMenus.MenuItemCheck(MenuTree,DRVE,1); |
  348.              5    :  AESMenus.MenuItemCheck(MenuTree,DRVF,1); |
  349.         ELSE
  350.         END;
  351.         IF C^.networkactive THEN 
  352.            AESMenus.MenuText(MenuTree,LOAD,ADR(on));
  353.         ELSE
  354.            AESMenus.MenuText(MenuTree,LOAD,ADR(off));
  355.         END;
  356.  
  357.         AESMenus.MenuItemCheck(MenuTree,S00,0);
  358.         AESMenus.MenuItemCheck(MenuTree,S10,0);
  359.         AESMenus.MenuItemCheck(MenuTree,S01,0);
  360.         AESMenus.MenuItemCheck(MenuTree,S11,0);
  361.         IF (C^.nextframetosend=0) AND (C^.frameexpected=0) THEN
  362.            AESMenus.MenuItemCheck(MenuTree,S00,1);
  363.         END;
  364.         IF (C^.nextframetosend=1) AND (C^.frameexpected=0) THEN
  365.            AESMenus.MenuItemCheck(MenuTree,S10,1);
  366.         END;
  367.         IF (C^.nextframetosend=0) AND (C^.frameexpected=1) THEN
  368.            AESMenus.MenuItemCheck(MenuTree,S01,1);
  369.         END;
  370.         IF (C^.nextframetosend=1) AND (C^.frameexpected=1) THEN
  371.            AESMenus.MenuItemCheck(MenuTree,S11,1);
  372.         END;
  373.         Events ;
  374.         END;
  375.         Terminate ;
  376. END     Control.